package com.kl.model;

import com.kl.valid.AddGroup;
import com.kl.valid.ListValue;
import com.kl.valid.UpdateGroup;
import lombok.Data;
import org.hibernate.validator.constraints.URL;

import javax.validation.constraints.*;
import java.io.Serializable;

/**
 * 需要校验的类
 */
@Data
public class BrandEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 注：只有在需要进行分组校验时才需要添加groups属性
     * * @NotNull和@NotEmpty和@NotBlank区别
     * * @NotNull：不能为null，但可以为empty
     * * @NotEmpty：不能为null，而且长度必须大于0
     * * @NotBlank：只能作用在String上，不能为null，而且调用trim()后，长度必须大于0
     * * 为empty的情况主要是针对数组和集合
     * *
     */


    // 品牌id
    @Null(message = "新增不能指定id，必须传入null", groups = {AddGroup.class})
    @NotNull(message = "更新必须指定id，不能为null", groups = {UpdateGroup.class})
    private Long brandId;

    // 品牌名
    @NotBlank(message = "品牌名必须提交", groups = {AddGroup.class, UpdateGroup.class})
    private String name;

    // 品牌商标
    @NotEmpty(message = "商标不能为空", groups = {AddGroup.class, UpdateGroup.class})
    @URL(message = "必须要符合URL规范", groups = {AddGroup.class, UpdateGroup.class})
    private String logo;

    /**
     * 对于Integer类型的属性，是没法使用正则表达式的
     * 但是我们又规定只能传入0或1，需要校验
     * 这种情况我们只能通过自定义校验注解和校验规则来完成
     */
    // 显示状态[0-不显示；1-显示]
    @ListValue(values = {0, 1}, groups = {AddGroup.class, UpdateGroup.class})
    private Integer showStatus;

    // 检索首字母
    @Pattern(regexp = "/^[a-zA-Z]$/]", message = "第一个字符必须是字母", groups = {AddGroup.class, UpdateGroup.class})
    private String firstLetter;

    // 排序
    @Min(value = 0, message = "排序字段值必须大于零", groups = {AddGroup.class, UpdateGroup.class})
    private Integer sort;
}
